home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1997 July / macformat52.iso / mac / Shareware Plus / Educational / LEE 2.1 / Source / defs.h < prev    next >
Text File  |  1996-08-08  |  12KB  |  454 lines

  1. /*
  2.  * Copyright (1992-96)
  3.  *
  4.  * Jeff Elman      University of California, San Diego
  5.  * Rik Belew       University of California, San Diego
  6.  * Stefano Nolfi   Institute of Psychology, C.N.R., Rome
  7.  * Filippo Menczer University of California, San Diego
  8.  * Greg Linden     University of California, San Diego
  9.  *
  10.  * This software may be redistributed without charge; this notice
  11.  * should be preserved.
  12.  */
  13.  
  14. #include <stdio.h>
  15. #include <math.h>
  16. #include <string.h>
  17. #include <time.h>
  18.  
  19. /*
  20.  * Lee Rel. 2.0 (August 1996)
  21.  * Compiling for the Mac: need extra headers if using (old versions of) Think C.
  22.  * These do not seem necessary with (new versions of) Metrowerks CodeWarrior. 
  23.  */
  24.  
  25. #ifdef THINK_C
  26. #include <stdlib.h>
  27. #include <console.h>
  28. #define _H_defs
  29. #endif
  30.  
  31. #ifdef __MWERKS__
  32. #include <stdlib.h>
  33. #include <SIOUX.h>
  34. /* #include <unix.h> */
  35. #include <console.h>
  36. #endif
  37.  
  38.  
  39. /************ ADJUST AS NEEDED AND RECOMPILE ******************/
  40. /***************** SIMULATION PARAMETERS **********************/
  41.  
  42. #define ALPHA         100      /* reproduction threshold */
  43.  
  44. #define    INIT_ABUNDANCE        0.4 /* For initial food amount */
  45.  
  46. #define WEIGHT_LIMIT        1.0 /* For weigth initialization */ 
  47.  
  48. /**************** DIMENSIONALITY PARAMETERS ********************/
  49.  
  50. #define NINPUTS    50 /* max number of inputs units        */
  51. #define NOUTPUTS 50 /* max number of output units        */
  52.  
  53. #define MAX_X 100 /* max horizontal world dimension */
  54. #define MAX_Y 100 /* max vertical world dimension */
  55.  
  56. #define MAXTYPES 20 /* max number of atom (food) types */
  57.  
  58. /********************* DEFAULT OPTIONS *************************/
  59.  
  60. #define WMUPE    0.15          /* percentage of mutated weights */
  61. #define BMUPE    0.15          /* percentage of mutated biases */
  62. #define INIT_MUTATION_RANGE    2.0 /* Default mutation range */
  63. #define INIT_LEARN_RATE        0.2 /* Default learning rate */ 
  64.  
  65. #define INIT_GENERATIONS    20    /* Default generations */
  66. #define INIT_LIFE_CYCLES    100    /* Default sweeps */
  67. #define INIT_POP        50    /* Default population size */
  68.  
  69. #define FILE_ROOT    "lee-config"    /* Default filename/root for file I/O */
  70.                 
  71. /********************* SENSOR TYPES *********************/
  72.  
  73. #define CONTACT        0    /* only sense the cell in front */
  74. #define GUT_SENSOR    1    /* senses the atoms in its own gut */
  75. #define AMBIENT        2    /* sense cells around, by dist. */
  76.  
  77.  
  78. /********************* SENSOR PARAMETERS   ***************/
  79.  
  80. #define MAXSENSORS 20 /* max number of sensors allowed */
  81.  
  82. #define MU_SENSOR_PROB 0.0    /* prob. of mutating sensory system */
  83.  
  84. #define COMPLEX_SIZE 1          /* number of atoms in complex */
  85.  
  86. /* if COMPLEX_SIZE is not 1 and/or NSENSORS is not a multiple of TYPES,
  87.     the sensor initialization routine (in populati.c) should be revised */
  88.  
  89. #define MAXRANGE     10       /* max ambient sensor range */
  90. #define MAXRANGESIZE ((2*MAXRANGE*MAXRANGE)-(4*MAXRANGE)+4)
  91.  
  92. /********************* MOTOR TYPES **********************/
  93.  
  94. #define BINARY        0    /* 00 nop, 01 ->, 10 <-, 11 move */
  95. #define JUMP        1    /* jump forward, maybe turn */
  96.  
  97.  
  98. /********************* MOTOR PARAMETERS  **********************/
  99.  
  100. #define MAXMOTORS 20 /* max number of motors allowed */
  101.  
  102. #define MU_MOTOR_PROB  0.0    /* prob. of mutating motor system */
  103.  
  104. #define ENERGY_USE  0.1 /* Energy cost for movement */
  105.  
  106. #define BIN_POWER    1    /* binary motor moves by one cell */
  107. #define JUMP_POWER    MAXRANGE    /* jump motor moves by many cells */
  108.  
  109. /************** CONSTANTS SHOULD NOT BE CHANGED **************/
  110. /************** SENSORY-MOTOR SYSTEM CONSTANTS ***************/
  111.  
  112.  
  113. #define UP         0    /* Used for direction */
  114. #define LEFT         -1
  115. #define RIGHT         1
  116. #define DOWN         2
  117.  
  118. #define FORWARD     0    /* Used for location. */
  119. #define LEFT_SIDE     -1    /* Relative to direction */
  120. #define RIGHT_SIDE     1    
  121. #define BACKWARD     2
  122.  
  123. /******************* MACINTOSH *******************/
  124.  
  125. #define    SQUARE_SIZE    10
  126. #define GAP_SIZE    2
  127. #define ORG_MOUTH    22
  128. #define START_X        20
  129. #define START_Y        20
  130. #define BORDER_OFFSET    3
  131.  
  132. #define        BASE_RES_ID      400
  133.  
  134. #define        MENU_BAR_ID        400
  135. #define        APPLE_MENU_ID      400
  136. #define        FILE_MENU_ID      401
  137. #define        EDIT_MENU_ID      402
  138. #define        OPTIONS_MENU_ID      403
  139.  
  140. #define        WINDOW_ID          400
  141. #define        ZOOM_CELL_WIND    405
  142. #define        INIT_DIALOG        400
  143. #define        ABOUT_ALERT        400
  144. #define        ERROR_ALERT        450
  145.  
  146. #define        PREV_ICON                405
  147. #define        NEXT_ICON                406
  148. #define        ARROW_OFFSET_MIDDLE        10
  149. #define        ARROW_OFFSET_BOTTOM        35
  150. #define        ARROW_SIZE                32
  151.  
  152. #define        ABOUT_CHOICE     1
  153. #define        QUIT_CHOICE     1
  154. #define        PAUSE_CHOICE    1
  155. #define        DISPLAY_CHOICE    2
  156. #define        LASSO_CHOICE    3
  157. #define        M_VERBOSE_CHOICE    5
  158. #define        L_VERBOSE_CHOICE    6
  159.  
  160.  
  161. /******************* SYSTEM CONSTANTS **********************/
  162.  
  163. #ifndef TRUE
  164. #define TRUE        1
  165. #endif
  166.  
  167. #ifndef FALSE
  168. #define FALSE        0
  169. #endif
  170.  
  171. #define    NIL_POINTER    0L
  172.  
  173. #ifndef NULL
  174. #define NULL        0
  175. #endif
  176.  
  177. #ifndef EOF
  178. #define EOF        (-1)
  179. #endif
  180.  
  181. /*
  182.  *      @(#)limits.h 1.12 89/08/31 SMI; from S5R2 1.1
  183.  *      LONG_MAX is the largest signed long int
  184.  *    this is 2^31-1=2147483647 (2^15-1=32767 for DOS)
  185.  */
  186. #define LONG_MAX                 0x7FFFFFFF
  187.  
  188. /*
  189.  * size of state array for random generator: do not change!
  190.  */
  191. #define RAND_DEG 31     
  192.  
  193. #define LOG_RES        100    /* resolution for sigmoid argument */
  194. #define NSIGMA       (10*LOG_RES) /* elements of sigmoid matrix */
  195.  
  196.  
  197. /********************* TYPEDEF'S ************************/
  198.  
  199. typedef int boolean;
  200.  
  201. typedef struct reaction
  202. {
  203.     boolean possible;     /* true is entry is in table */
  204.     float energy;        /* >0 esothermic, <0 endothermic */
  205.     int by_prod[MAXTYPES];    /* vector of by-product atoms */
  206. } reaction;
  207.  
  208. typedef struct position 
  209. {
  210.         int x,y;
  211. } position;
  212.  
  213. typedef struct offset 
  214. {
  215.         int x,y;
  216.     float d;
  217. } offset;
  218.  
  219. struct loPs
  220. {
  221.         position    current;
  222.     float        distance;
  223.         struct loPs    *next;
  224. };
  225.  
  226. typedef struct loPs listofPositions;
  227.  
  228. typedef struct motor 
  229. {
  230.     int    system;            /* eg, 1-cell or polar... */
  231.     int    mask[NOUTPUTS];        /* which output units
  232.                      * correspond to the motor */
  233.     int    power;             /* how far it can move */
  234.     /* int location, orientation; */
  235. } motor;
  236.  
  237. typedef struct sensor
  238. {
  239.     int    system;            /* eg, contact or ambient */
  240.     int    mask[NINPUTS];        /* which input units
  241.                      * correspond to the sensor */
  242.     int    complex[MAXTYPES];        /* eg, {1,0,1} = AC complex */ 
  243.     int    orientation;        /* eg, FORWARD or LEFT_SIDE */
  244.     int    range;            /* max dist. (#binary moves) */
  245.     /* int    location ; */
  246. } sensor;
  247.  
  248.  
  249. struct indiv 
  250. {
  251.     /*
  252.      * non-net morph features
  253.      */
  254.  
  255.     int     gutsize;        /* max no. atoms */
  256.     int    gut[MAXTYPES];        /* gut content vector */
  257.     sensor     sensor_specs[MAXSENSORS];    /* my sensors */ 
  258.     motor    motor_specs[MAXMOTORS];    /* my motors */
  259.     float  energy;            /* my energy                       */
  260.     int    worldx;            /* my x position                   */
  261.     int    worldy;            /* my y position                   */
  262.     int    direction;        /* my direction                    */
  263.     int    generation;        /* my generation                   */
  264.     int    lifecycle;        /* my age                          */
  265.     int    id;            /* my number                       */
  266.     int    pid;            /* my parent's number              */
  267.     float  error;            /* my learning error                */
  268.     int  fit;            /* number offsprings */
  269.     struct indiv *last;        /* pointer to previous individual  */
  270.     struct indiv *next;        /* pointer to next individual      */
  271.  
  272.     /*
  273.      * network features
  274.      */
  275.     float   **layerp;         /* the layers themselves           */
  276.     float   **deltap;         /* deltas                          */
  277.     float   **weightp;         /* weights between layers          */
  278.     float   **biasp;         /* biases for each node, each layer*/
  279.     float   **iiweightp;     /* backup weights between layers   */
  280.     float   **iibiasp;         /* backup biases for each node, each layer*/
  281.  
  282. };
  283.  
  284.  
  285. struct cella
  286. {
  287.     enum {org, food} type;
  288.     union{
  289.         struct    indiv    *ap;    /* if type is org  */
  290.         int        atom;    /* if type is food */
  291.          } datum;
  292.     struct cella *next; /* points to next org/food in cell */
  293. };
  294.  
  295. typedef struct cella cell;
  296.  
  297. /***************** EXTERN PROTOTYPES *******************/
  298.  
  299. extern position            moveDiff();
  300. extern position            find_cell ();
  301. extern listofPositions*    range();
  302. extern listofPositions*    check_world ();
  303. extern position         binaryMotorMove ();
  304. extern position         jumpMotorMove ();
  305. extern position            distance ();
  306. extern float            clogistic();
  307. extern float            logistic();
  308. extern float            scale();
  309. extern double             exp();
  310. extern struct indiv *    add_indiv();
  311. extern struct indiv *    delete_indiv();
  312. extern struct indiv *    getnext_indiv();
  313. extern struct indiv *    get_indiv();
  314. extern float             rans();
  315. extern int             mrand();
  316. extern int Getptr();
  317. extern int Setptr();
  318. extern int Srand();
  319. extern int init_pop();
  320. extern int init_world();
  321. extern int load_all_indiv();
  322. extern int load_world();
  323. extern int save_best_indiv();
  324. extern int generati();
  325. extern int save_dat();
  326. extern void sense_world();
  327. extern int activate_net();
  328. extern int print_out();
  329. extern int init_net();
  330. extern int update_net();
  331. extern int update_world();
  332. extern int save_world();
  333. extern int save_all_indiv();
  334. extern int build_geno_net();
  335. extern int build_pheno_net();
  336. extern int destroy_network();
  337. extern int sensor_size();
  338. extern int get_mask();
  339. extern int motor_size();
  340. extern int motor_power();
  341. extern int mu_sensorymotor();
  342. extern boolean ins_food();
  343. extern int genfilen();
  344. extern int del_org();
  345. extern int ins_org();
  346. extern double log();
  347. extern double exp();
  348. /* extern double atof(); */
  349. /* extern char *strcpy(); */
  350. extern void carica_sigmoide(); 
  351. extern void carica_offsets(); 
  352. extern float act_in_world(); 
  353. extern void move(); 
  354. extern void     del_org_Interactive(); 
  355. extern void     InteractiveInit(); 
  356. extern void     InteractiveFinalSetUp(); 
  357. extern void     moveInteractDrawSelectFrame(); 
  358. extern void     update_world_Interactive(); 
  359. extern void     EventsInteractive(); 
  360. extern void     actInWorldInteractive(); 
  361. extern void     moveInteractiveLasso(); 
  362. extern void     updateGenInteractive(); 
  363. extern void     ins_org_Interactive(); 
  364.  
  365. /***************** EXTERN ARRAYS *******************/
  366.  
  367. extern long Rstate[RAND_DEG];
  368. extern reaction react_table[MAXTYPES][MAXTYPES];
  369. extern int distrib[MAXTYPES][5];
  370. extern  cell  *world[MAX_X][MAX_Y];
  371. extern  offset *off_vec[4][MAXRANGESIZE];
  372. extern char        fileroot[];
  373. extern char nameworlds[];
  374. extern    int s_type[];
  375. extern    int m_type[];
  376. extern int   s_range[];
  377. extern int   s_orient[];
  378. extern  float amoebat[];
  379. extern float    norm_dist[];
  380. extern float  sigmoide[];
  381.  
  382. /***************** EXTERN VARIABLES *******************/
  383.  
  384. extern char *optarg;
  385. extern unsigned long seed;
  386. extern int ecount;
  387. extern FILE *errfp;
  388. extern float rate;
  389. extern int sweeps;
  390. extern boolean errsig;
  391. extern boolean printout;
  392. extern int learn;
  393. extern boolean saturation;
  394. extern int generations;
  395. extern int start_num_amoebas;
  396. extern int startgeneration;
  397. extern float mutations_range;
  398. extern int mutations;
  399. extern int bmutations;
  400. extern boolean mbiasestoo;
  401. extern boolean unary_reactions;
  402. extern int verbose;
  403. extern int save_best;
  404. extern int gutsize;
  405. extern int save_everyn;
  406. extern int *layer_descp;
  407. extern int nlayers;
  408. extern    float weight_limit;
  409. extern  int nlayers;
  410. extern  int *layer_descp;
  411. extern  int gutsize;    
  412. extern    FILE    *cfp;
  413. extern  int   pop_size;
  414. extern  float   energy_reserve;
  415. extern  FILE  *resfp;
  416. extern  int   lifecycle;
  417. extern  int   gen;
  418. extern  struct indiv *a_head;
  419. extern  float global_error;
  420. extern  boolean gDone;
  421. extern   struct indiv *end_head;
  422. extern  struct indiv *t_head;
  423. extern float    abundance;
  424. extern boolean    gInteractive;
  425. extern int types;
  426. extern int x_dim;
  427. extern int y_dim;
  428. extern int nsensors;
  429. extern int nmotors;
  430.  
  431.  
  432.  
  433. /***************** EXTERN MAC VARIABLES *******************/
  434.  
  435. #ifdef THINK_C
  436. extern WindowPtr    gTheWindow, gZoomCellWindow;
  437. extern DialogPtr    gInitDialog;
  438. extern MenuHandle    gAppleMenu, gFileMenu, gEditMenu, gOptionsMenu;
  439. extern boolean        gLassoOn, gPaused;
  440. extern Point        gCurrentZoomCell;
  441. extern int            gCurrentZoomItem;
  442. #endif
  443.  
  444. #ifdef __MWERKS__
  445. extern WindowPtr    gTheWindow, gZoomCellWindow;
  446. extern DialogPtr    gInitDialog;
  447. extern MenuHandle    gAppleMenu, gFileMenu, gEditMenu, gOptionsMenu;
  448. extern boolean        gLassoOn, gPaused;
  449. extern Point        gCurrentZoomCell;
  450. extern int            gCurrentZoomItem;
  451. #endif
  452.  
  453.  
  454.